"""
1.列表的定义和使用
    1.定义列表
    2.用下标（索引值）访问员元素
    3.利用下标替换元素
    4.添加元素
    5.删除元素
"""
def list_1():
    #1.定义列表
    fruits = ["葡萄","苹果","菠萝","西瓜",10] # python的列表没有数据类型的区分，可以装任意类型
    #查看 fruits的数据类型
    print( type(fruits) )
    print(fruits)
    #2.通过下标访问元素
    print(fruits[0])#访问列表中第一个元素
    print(fruits[1])#访问列表中第二个元素
    print(fruits[-1])#访问列表中最后一个元素
    print(fruits[-2])#访问列表中倒数第二个元素
    #print(fruits[6]) # 报错  IndexError: list index out of range
    #3.通过下标替换元素
    fruits[1] = "香蕉"
    print(fruits)#['葡萄', '香蕉', '菠萝', '西瓜', 10]
    #4.添加元素
    fruits.append("柚子") # 在列表的末尾 追加元素
    print(fruits) #['葡萄', '香蕉', '菠萝', '西瓜', 10, '柚子']
    fruits.insert(0,"柠檬")# 在指定索引值插入数据
    print(fruits)#['柠檬', '葡萄', '香蕉', '菠萝', '西瓜', 10, '柚子']
    #5.删除元素
    del fruits[1] #指定索引值进行删除元素
    print(fruits)#['柠檬', '香蕉', '菠萝', '西瓜', 10, '柚子']
    f = fruits.pop() #在列表末尾弹出元素 ，弹出的元素会当结果进行返回
    print(fruits,"被删除的元素是:",f)
    fruits.pop(0) #指定索引值去弹出元素
    print(fruits)
    fruits.remove("菠萝")#指定元素进行删除
    print(fruits)#['香蕉', '西瓜', 10]
    fruits.clear()#清空列表
    print(fruits)


"""
2.列表的常用操作
    列表连接
    获取长度
    遍历列表
    列表切片
    列表排序
    列表反转
    元素出现的次数
    查找元素
"""
def list_2():
    fruits = ["葡萄","苹果","菠萝","西瓜"]
    #1.列表的连接  拼接
    fruits += ["柠檬","柚子","香蕉"] # 利用符号进行拼接
    print(fruits) #['葡萄', '苹果', '菠萝', '西瓜', '柠檬', '柚子', '香蕉']
    anmial = ["猴子","大象"]
    fruits.extend(anmial) #利用函数进行拼接
    print(fruits)#['葡萄', '苹果', '菠萝', '西瓜', '柠檬', '柚子', '香蕉', '猴子', '大象']
    #2.获取列表长度
    print("列表的长度：", len(fruits))
    #3.利用for循环遍历列表
    for fruit in fruits:
        print(fruit,end="-")
    print()
    #通过索引值进行遍历
    for index in range(len(fruits)):
        print(fruits[index],end=",")
    print()
    #通过 enumerate函数处理列表，在遍历的时候可以打印索引值又可以打印元素
    for index,elem in enumerate(fruits):
        print(elem,"的索引值为：",index)
    #4.切片
    fruits2 = fruits[:4]
    print(fruits2) #['葡萄', '苹果', '菠萝', '西瓜']
    fruits3 = fruits # 将 fruits 赋值  给 fruits3  fruits 和 fruits3 共享同一块地址值
    fruits4 = fruits[:] # 将 fruits  复制  给 fruits4   将fruits 赋值给了fruits4，并为fruits4开辟了一块地址值
    #fruits5 = fruits.copy() 课下试试 看看是共享 还是 开辟
    print("fruits3:",fruits3)
    print("fruits4:",fruits4)
    # fruits3 和 fruits4的数据是一样的
    fruits.pop() #将 fruits 大象 删除
    print("fruits3:",fruits3)
    print("fruits4:",fruits4)
    # 列表排序
    fruits5 = sorted(fruits)
    print(fruits5)
    fruits.sort()#没有返回值，再原列表上进行排序  会修改原列表
    print("list.sort:",fruits)
    #---- 排序后进行反转
    print("排序后进行反转:",sorted(fruits,reverse=True))
    # 列表反转
    print("列表反转-函数：",list(reversed(fruits)))
    print("列表反转-切片：", fruits[::-1]) # 只要是切片后的数据 赋值一个变量 那就这个变量就会开辟一个新的地址值
    fruits.reverse() # 没有返回值，再原列表上进行反转 会修改原列表
    print("list.fruits:",fruits)
    #元素出现的次数
    count = fruits.count("猴子")
    print(count)
    #查找元素 再列表中的索引值
    index = fruits.index("猴子")
    print("马楼所在的索引值：",index)

if __name__ == '__main__':
    #Python中的main方法 ，为了统一调用自定义的函数，函数的调用都在main中
    #如果函数中没有写任何代码语句 会报错 可以用pass关键字 暂时解决该错误
    #list_1()
    list_2()











